package com.zhenlonghu.controller_test.controller;

import com.zhenlonghu.controller_test.model.User;
import com.zhenlonghu.controller_test.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 用户控制器，处理用户相关的HTTP请求
 * - @Controller：标注为控制器，负责接收请求并返回视图
 * - @RequestMapping("/users")：所有请求路径前缀为 /users
 */
@Controller
@RequestMapping("/users")
public class UserController {
    // 注入用户服务（构造器注入，推荐方式）
    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    /**
     * 处理 GET /users 请求，显示用户列表
     * @param model 用于传递数据到视图
     * @return 视图名称（对应 templates/users.html）
     */
    @GetMapping
    public String listUsers(Model model) {
        // 向视图传递用户列表数据（键为"users"，值为用户列表）
        model.addAttribute("users", userService.getAllUsers());
        return "users"; // 返回视图名称
    }

    /**
     * 处理 GET /users/new 请求，显示添加用户表单
     * @param model 传递空用户对象到表单
     * @return 视图名称（对应 templates/user-form.html）
     */
    @GetMapping("/new")
    public String showNewUserForm(Model model) {
        model.addAttribute("user", new User()); // 传递空用户对象
        return "user-form";
    }

    /**
     * 处理 POST /users 请求，保存用户
     * @param user 表单提交的用户数据（@ModelAttribute 绑定表单数据）
     * @return 重定向到用户列表页（避免表单重复提交）
     */
    @PostMapping
    public String saveUser(@ModelAttribute User user) {
        userService.saveUser(user); // 调用服务保存用户
        return "redirect:/users"; // 重定向到用户列表
    }

    /**
     * 处理 GET /users/{id} 请求，显示用户详情
     * @param id 路径参数（用户ID）
     * @param model 传递用户数据到视图
     * @return 视图名称（对应 templates/user-details.html）
     */
    @GetMapping("/{id}")
    public String showUserDetails(@PathVariable Long id, Model model) {
        User user = userService.getUserById(id);
        if (user != null) {
            model.addAttribute("user", user); // 传递用户详情
            return "user-details";
        } else {
            return "redirect:/users"; // 用户不存在，重定向到列表
        }
    }
}